package com.starleague.battletech.unit.mech.controller;

import java.util.List;

import com.starleague.StarLeagueException;
import com.starleague.battletech.controller.IBattletechController;
import com.starleague.battletech.unit.mech.MechMovementActionType;
import com.starleague.battletech.unit.mech.dto.IMechDto;
import com.starleague.hexagonal.IHexCoordinate;
import com.starleague.hexagonal.flat.FlatHexDirection;

public interface IMechController
        extends IBattletechController
{
    // TODO: Return the result, or the Future in some sort of result/audit object
    // TODO: Or not, and have the caller block, and not know the underlying asynch process
    void mechWalk(IMechDto mechDto,
                  List<MechMovementActionType> movementActionTypeList) throws StarLeagueException;

    // TODO: Return the result, or the Future in some sort of result/audit object
    // TODO: Or not, and have the caller block, and not know the underlying asynch process
    void mechRun(IMechDto mechDto,
                 List<MechMovementActionType> movementActionTypeList) throws StarLeagueException;

    // TODO: Return the result, or the Future in some sort of result/audit object
    // TODO: Or not, and have the caller block, and not know the underlying asynch process
    void mechStandStill(IMechDto mechDto) throws StarLeagueException;

    // TODO: Return the result, or the Future in some sort of result/audit object
    // TODO: Or not, and have the caller block, and not know the underlying asynch process
    void mechJump(IMechDto mechDto,
                  IHexCoordinate hexCoordinate,
                  FlatHexDirection facing) throws StarLeagueException;
}
